/*
Symbol
自ECMAScript 2015起，symbol成为了一种新的原生类型，就像number和string一样。
symbol类型的值是通过Symbol构造函数创建的。

可以传递参做为唯一标识 只支持 string 和 number类型的参数

Symbol的值是唯一的

用作对象属性的键
*/
let symbol01 = Symbol('1'); // 唯一的
let symbol02 = Symbol('1'); // 唯一的
console.log(symbol01 === symbol02); // false
// for Symbol 
/*
for全局循环
symbol有没有注册过这个key
如果有直接拿来用（第二次）
如果没有的话 就去创建一个（第一次）
*/
console.log(Symbol.for('xiaoli') === Symbol.for('xiaoli')); // true
let objSymbol01 = {
    name: 1,
    // symbol01: 111,
    // symbol02: 222
    [symbol01]: 111,
    [symbol02]: 222
};
console.log(objSymbol01); // { name: 1, [Symbol(1)]: 111, [Symbol(1)]: 222 }
// for in 不能读到symbol
for (let k in objSymbol01) {
    console.log(k);
}
// keys 不能读到symbol
console.log(Object.keys(objSymbol01));
// getOwnPropertyNames 不能读到symbol
console.log(Object.getOwnPropertyNames(objSymbol01));
// getOwnPropertySymbols 可以取到symbol,但是其他属性取不到
console.log(Object.getOwnPropertySymbols(objSymbol01));
// Reflect反射 可以取到正常属性和symbol
console.log(Reflect.ownKeys(objSymbol01));
